package com.tianji.learning.service.impl;

import cn.hutool.core.util.StrUtil;
import com.tianji.api.client.aigc.AigcClient;
import com.tianji.common.utils.UserContext;
import com.tianji.learning.domain.dto.ReplyDTO;
import com.tianji.learning.domain.po.InteractionQuestion;
import com.tianji.learning.service.AIService;
import com.tianji.learning.service.IInteractionReplyService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * @author wyy
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class AIServiceImpl implements AIService {
    private final AigcClient aigcClient;
    private final IInteractionReplyService iInteractionReplyService;

    @Value("${tj.ai.user-id:9999}")
    private Long aiUserId;

    /**
     * AI自动回复
     *
     * @param interactionQuestion 问题对象
     */
    @Async
    @Override
    public void autoReply(InteractionQuestion interactionQuestion) {
        //构建包含完整问题信息的查询模板（标题+描述）
        String question = StrUtil.format("""
                这是一个学生提出的问题，请以专业的角度进行回答，不要随意编造。
                标题：{}。
                描述：{}。
                """, interactionQuestion.getTitle(), interactionQuestion.getDescription());
        //设置当前用户id，否则会出现401错误
        UserContext.setUser(interactionQuestion.getUserId());
        //调用AI文本生成服务获取专业回答
        String reply = this.aigcClient.chatText(question);

        //构建系统自动回复数据对象
        ReplyDTO replyDTO = ReplyDTO.builder()
                .userId(aiUserId)   //固定系统用户id
                .content(reply) //ai生成的回复内容
                .anonymity(false)   //明确显示系统回复身份
                .isStudent(false)   //标记为非学生回复
                .build();

        //持久化存储生成的内容
        this.iInteractionReplyService.saveReply(replyDTO);
    }
}
